<!DOCTYPE html>
<html lang="en">
<head>
  <title>Hazelcast Cluster Manager - Vert.x</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <meta content="Vert.x is a tool-kit for building reactive applications on the JVM." name="description">
  <link href="http://vertx.io/stylesheets/docs.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/stylesheets/font-awesome.min.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/javascripts/styles/rainbow.min.css" media="screen" rel="stylesheet">
  <!-- IE 6-8 support of HTML 5 elements -->
  <!--[if lt IE 9]>
  <script src="http://static.jboss.org/theme/js/libs/html5/pre3.6/html5.min.js"></script>
  <![endif]-->

  <link rel="apple-touch-icon" sizes="57x57" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="http://vertx.io/assets/favicons/vertx-favicon-7/manifest.json">
  <link rel="mask-icon" href="http://vertx.io/assets/favicons/vertx-favicon-7/safari-pinned-tab.svg" color="#5bbad5">
  <meta name="msapplication-TileColor" content="#7d3194">
  <meta name="msapplication-TileImage" content="http://vertx.io/assets/favicons/vertx-favicon-7/mstile-144x144.png">
  <meta name="theme-color" content="#ffffff">

  <link href="http://fonts.googleapis.com/css?family=Ubuntu:400,500,700,400italic" rel="stylesheet" type="text/css">
  <link rel="alternate" type="application/rss+xml" title="RSS"
     href="http://vertx.io/feed.xml">
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-30144458-1', 'auto');
    ga('create', 'UA-71153120-1', 'auto', 'tracker');
    ga('send', 'pageview');
    ga('tracker.send', 'pageview');
  </script>
</head>
<body>

<a href="http://www.reactivemanifesto.org/" id="reactive-manifesto-banner">
  <img style="border: 0; position: fixed; right: 0; top:0; z-index: 9000"
    src="http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-black-right.png">
</a>

<a id="skippy" class="sr-only sr-only-focusable" href="#content"><div class="container"><span class="skiplink-text">Skip to main content</span></div></a>

<header class="navbar navbar-default navbar-static-top" id="top" role="banner">
  <div class="container">
    <div class="navbar-header">
      <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#vertx-navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="http://vertx.io/" class="navbar-brand"><img alt="Brand" src="http://vertx.io/assets/logo-sm.png"></a>
    </div>
    <nav class="collapse navbar-collapse" id="vertx-navbar-collapse">
      <ul class="nav navbar-nav navbar-right">
        <li><a href="http://vertx.io/download/">Download</a></li>
        <li><a href="http://vertx.io/docs/">Documentation</a></li>
        <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
        <li><a href="http://vertx.io/community/">Community</a></li>
        <li><a href="http://vertx.io/materials/">Materials</a></li>
        <li><a href="http://vertx.io/blog/">Blog</a></li>        
      </ul>
    </nav>
  </div>
</header>



  <div class="page-header" id="content">
    <div class="container">
      <div class="row">
        <div class="col-sm-12">
          <h1>Hazelcast Cluster Manager</h1>
          
        </div>
      </div>
    </div>
  </div>




<div id="content">
  <div class="container docs-content">
    <div class="row">
      <div class="col-sm-12 col-md-push-9 col-md-3 hidden-xs hidden-sm">
        <div id="sidebar" data-spy="affix">
          <ul class="sectlevel1">
<li><a href="#_using_this_cluster_manager">Using this cluster manager</a></li>
<li><a href="#_configuring_this_cluster_manager">Configuring this cluster manager</a></li>
<li><a href="#_using_an_existing_hazelcast_cluster">Using an existing Hazelcast cluster</a></li>
<li><a href="#_using_hazelcast_async_methods">Using Hazelcast async methods</a></li>
<li><a href="#_trouble_shooting_clustering">Trouble shooting clustering</a>
<ul class="sectlevel2">
<li><a href="#_multicast_not_enabled_on_the_machine">Multicast not enabled on the machine.</a></li>
<li><a href="#_using_wrong_network_interface">Using wrong network interface</a></li>
<li><a href="#_using_a_vpn">Using a VPN</a></li>
<li><a href="#_when_multicast_is_not_available">When multicast is not available</a></li>
<li><a href="#_enabling_logging">Enabling logging</a></li>
</ul>
</li>
<li><a href="#_hazelcast_logging">Hazelcast logging</a></li>
<li><a href="#_using_a_different_hazelcast_version">Using a different Hazelcast version</a></li>
</ul>
        </div>
      </div>
      <div class="col-sm-12 col-md-pull-3 col-md-9">
        <div class="toc hidden-md hidden-lg">
          <h2>Table of Contents</h2>
          <ul class="sectlevel1">
<li><a href="#_using_this_cluster_manager">Using this cluster manager</a></li>
<li><a href="#_configuring_this_cluster_manager">Configuring this cluster manager</a></li>
<li><a href="#_using_an_existing_hazelcast_cluster">Using an existing Hazelcast cluster</a></li>
<li><a href="#_using_hazelcast_async_methods">Using Hazelcast async methods</a></li>
<li><a href="#_trouble_shooting_clustering">Trouble shooting clustering</a>
<ul class="sectlevel2">
<li><a href="#_multicast_not_enabled_on_the_machine">Multicast not enabled on the machine.</a></li>
<li><a href="#_using_wrong_network_interface">Using wrong network interface</a></li>
<li><a href="#_using_a_vpn">Using a VPN</a></li>
<li><a href="#_when_multicast_is_not_available">When multicast is not available</a></li>
<li><a href="#_enabling_logging">Enabling logging</a></li>
</ul>
</li>
<li><a href="#_hazelcast_logging">Hazelcast logging</a></li>
<li><a href="#_using_a_different_hazelcast_version">Using a different Hazelcast version</a></li>
</ul>
        </div>
        <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This is a cluster manager implementation for Vert.x that uses <a href="http://hazelcast.com">Hazelcast</a>.</p>
</div>
<div class="paragraph">
<p>It is the default cluster manager used in the Vert.x distribution, but it can be replaced with another implementation as Vert.x
cluster managers are pluggable.  This implementation is packaged inside:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
  &lt;groupId&gt;io.vertx&lt;/groupId&gt;
  &lt;artifactId&gt;vertx-hazelcast&lt;/artifactId&gt;
  &lt;version&gt;3.3.3&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>In Vert.x a cluster manager is used for various functions including:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Discovery and group membership of Vert.x nodes in a cluster</p>
</li>
<li>
<p>Maintaining cluster wide topic subscriber lists (so we know which nodes are interested in which event bus addresses)</p>
</li>
<li>
<p>Distributed Map support</p>
</li>
<li>
<p>Distributed Locks</p>
</li>
<li>
<p>Distributed Counters</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Cluster managers <strong>do not</strong> handle the event bus inter-node transport, this is done directly by Vert.x with TCP connections.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_using_this_cluster_manager">Using this cluster manager</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If you are using Vert.x from the command line, the jar corresponding to this cluster manager (it will be named <code>vertx-hazelcast-${version}</code>.jar`
should be in the <code>lib</code> directory of the Vert.x installation.</p>
</div>
<div class="paragraph">
<p>If you want clustering with this cluster manager in your Vert.x Maven or Gradle project then just add a dependency to
the artifact: <code>io.vertx:vertx-hazelcast:${version}</code> in your project.</p>
</div>
<div class="paragraph">
<p>If the jar is on your classpath as above then Vert.x will automatically detect this and use it as the cluster manager.
Please make sure you don&#8217;t have any other cluster managers on your classpath or Vert.x might
choose the wrong one.</p>
</div>
<div class="paragraph">
<p>You can also specify the cluster manager programmatically if you are embedding Vert.x by specifying it on the options
when you are creating your Vert.x instance, for example:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">ClusterManager mgr = new HazelcastClusterManager();

VertxOptions options = new VertxOptions().setClusterManager(mgr);

Vertx.clusteredVertx(options, res -&gt; {
  if (res.succeeded()) {
    Vertx vertx = res.result();
  } else {
    // failed!
  }
});</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_configuring_this_cluster_manager">Configuring this cluster manager</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Usually the cluster manager is configured by a file
<a href="https://github.com/vert-x3/vertx-hazelcast/blob/master/src/main/resources/default-cluster.xml"><code>default-cluster.xml</code></a>
which is packaged inside the jar.</p>
</div>
<div class="paragraph">
<p>If you want to override this configuration you can provide a file called <code>cluster.xml</code> on your classpath and this
will be used instead. If you want to embed the <code>cluster.xml</code> file in a fat jar, it must be located at the root of the
fat jar. If it&#8217;s an external file, the <strong>directory</strong> containing the file must be added to the classpath. For
example, if you are using the <em>launcher</em> class from Vert.x, the classpath enhancement can be done as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code># If the cluster.xml is in the current directory:
java -jar ... -cp . -cluster
vertx run MyVerticle -cp . -cluster

# If the cluster.xml is in the conf directory
java -jar ... -cp conf -cluster</code></pre>
</div>
</div>
<div class="paragraph">
<p>Another way to override the configuration is by providing the system property <code>vertx.hazelcast.config</code> with a
location:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code># Use a cluster configuration located in an external file
java -Dvertx.hazelcast.config=./config/my-cluster-config.xml -jar ... -cluster

# Or use a custom configuration from the classpath
java -Dvertx.hazelcast.config=classpath:my/package/config/my-cluster-config.xml -jar ... -cluster</code></pre>
</div>
</div>
<div class="paragraph">
<p>The <code>vertx.hazelcast.config</code> system property, when present, overrides any <code>cluster.xml</code> on the classpath, but if
loading
from this system property fails, then loading falls back to either <code>cluster.xml</code> or the Hazelcast default configuration.</p>
</div>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<div class="title">Caution</div>
</td>
<td class="content">
Configuration of Hazelcast the <code>-Dhazelcast.config</code> system property is not supported by Vert.x and should
not be used.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The xml file is a Hazelcast configuration file and is described in detail in the documentation on the Hazelcast
web-site.</p>
</div>
<div class="paragraph">
<p>You can also specify configuration programmatically if embedding:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">Config hazelcastConfig = new Config();

// Now set some stuff on the config (omitted)

ClusterManager mgr = new HazelcastClusterManager(hazelcastConfig);

VertxOptions options = new VertxOptions().setClusterManager(mgr);

Vertx.clusteredVertx(options, res -&gt; {
  if (res.succeeded()) {
    Vertx vertx = res.result();
  } else {
    // failed!
  }
});</code></pre>
</div>
</div>
<div class="paragraph">
<p>Hazelcast supports several different transports including multicast and TCP. The default configuration uses
multicast so you must have multicast enabled on your network for this to work.</p>
</div>
<div class="paragraph">
<p>For full documentation on how to configure the transport differently or use a different transport please consult the
Hazelcast documentation.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_using_an_existing_hazelcast_cluster">Using an existing Hazelcast cluster</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can pass an existing <code>HazelcastInstance</code> in the cluster manager to reuse an existing cluster:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-java" data-lang="java">ClusterManager mgr = new HazelcastClusterManager(hazelcastInstance);
VertxOptions options = new VertxOptions().setClusterManager(mgr);
Vertx.clusteredVertx(options, res -&gt; {
  if (res.succeeded()) {
    Vertx vertx = res.result();
  } else {
    // failed!
  }
});</code></pre>
</div>
</div>
<div class="paragraph">
<p>In this case, vert.x is not the cluster owner and so do not shutdown the cluster on close.</p>
</div>
<div class="paragraph">
<p>Notice that the custom Hazelcast instance need to be configured with:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;map name="__vertx.subs"&gt;
  &lt;backup-count&gt;1&lt;/backup-count&gt;
  &lt;time-to-live-seconds&gt;0&lt;/time-to-live-seconds&gt;
  &lt;max-idle-seconds&gt;0&lt;/max-idle-seconds&gt;
  &lt;eviction-policy&gt;NONE&lt;/eviction-policy&gt;
  &lt;max-size policy="PER_NODE"&gt;0&lt;/max-size&gt;
  &lt;eviction-percentage&gt;25&lt;/eviction-percentage&gt;
  &lt;merge-policy&gt;com.hazelcast.map.merge.LatestUpdateMapMergePolicy&lt;/merge-policy&gt;
&lt;/map&gt;
&lt;semaphore name="__vertx.*"&gt;
  &lt;initial-permits&gt;1&lt;/initial-permits&gt;
&lt;/semaphore&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>IMPORTANT</strong> Do not use Hazelcast clients or smart clients when using high-availability (HA, or fail-over) in your
cluster as they do not notify when they leave the cluster and you may loose data, or leave the cluster in an
inconsistent state. See <a href="https://github.com/vert-x3/vertx-hazelcast/issues/24" class="bare">https://github.com/vert-x3/vertx-hazelcast/issues/24</a> for more details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_using_hazelcast_async_methods">Using Hazelcast async methods</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Hazelcast&#8217;s <code>IMap</code> and <code>IAtomicLong</code> interfaces can be used with async methods returning <code>ICompletableFuture&lt;V&gt;</code>,
a natural fit for Vert.x threading model. Even though these interfaces have been available for a long time, they are not
provided by the public <code>HazelcastInstance</code> API.</p>
</div>
<div class="paragraph">
<p>The default behavior of the <code>HazelcastClusterManager</code> is to use the public API. Supplying the option
<code>-Dvertx.hazelcast.async-api=true</code> on JVM startup, will indicate that the async Hazelcast API methods will be used to
communicate with the hazelcast cluster. Effectively, this means that when this option is enabled,
execution of all <code>Counter</code> operations and <code>AsyncMap.get</code>,<code>AsyncMap.put</code> and <code>AsyncMap.remove</code> operations will
occur in the calling thread (the event loop), instead of a worker thread with <code>vertx.executeBlocking</code>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_trouble_shooting_clustering">Trouble shooting clustering</h2>
<div class="sectionbody">
<div class="paragraph">
<p>If the default multicast configuration is not working here are some common causes:</p>
</div>
<div class="sect2">
<h3 id="_multicast_not_enabled_on_the_machine">Multicast not enabled on the machine.</h3>
<div class="paragraph">
<p>It is quite common in particular on OSX machines for multicast to be disabled by default. Please google for
information on how to enable this.</p>
</div>
</div>
<div class="sect2">
<h3 id="_using_wrong_network_interface">Using wrong network interface</h3>
<div class="paragraph">
<p>If you have more than one network interface on your machine (and this can also be the case if you are running
VPN software on your machine), then Hazelcast may be using the wrong one.</p>
</div>
<div class="paragraph">
<p>To tell Hazelcast to use a specific interface you can provide the IP address of the interface in the <code>interfaces</code>
element of the configuration. Make sure you set the <code>enabled</code> attribute to <code>true</code>. For example:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;interfaces enabled="true"&gt;
  &lt;interface&gt;192.168.1.20&lt;/interface&gt;
&lt;/interfaces&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>When running Vert.x is in clustered mode, you should also make sure that Vert.x knows about the correct interface.
When running at the command line this is done by specifying the <code>cluster-host</code> option:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>vertx run myverticle.js -cluster -cluster-host your-ip-address</pre>
</div>
</div>
<div class="paragraph">
<p>Where <code>your-ip-address</code> is the same IP address you specified in the Hazelcast configuration.</p>
</div>
<div class="paragraph">
<p>If using Vert.x programmatically you can specify this using
<code><a href="../../apidocs/io/vertx/core/VertxOptions.html#setClusterHost-java.lang.String-">setClusterHost</a></code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="_using_a_vpn">Using a VPN</h3>
<div class="paragraph">
<p>This is a variation of the above case. VPN software often works by creating a virtual network interface which often
doesn&#8217;t support multicast. If you have a VPN running and you do not specify the correct interface to use in both the
hazelcast configuration and to Vert.x then the VPN interface may be chosen instead of the correct interface.</p>
</div>
<div class="paragraph">
<p>So, if you have a VPN running you may have to configure both the Hazelcast and Vert.x to use the correct interface as
described in the previous section.</p>
</div>
</div>
<div class="sect2">
<h3 id="_when_multicast_is_not_available">When multicast is not available</h3>
<div class="paragraph">
<p>In some cases you may not be able to use multicast as it might not be available in your environment. In that case
you should configure another transport, e.g. TCP  to use TCP sockets, or AWS when running on Amazon EC2.</p>
</div>
<div class="paragraph">
<p>For more information on available Hazelcast transports and how to configure them please consult the Hazelcast
documentation.</p>
</div>
</div>
<div class="sect2">
<h3 id="_enabling_logging">Enabling logging</h3>
<div class="paragraph">
<p>When trouble-shooting clustering issues with Hazelcast it&#8217;s often useful to get some logging output from Hazelcast
to see if it&#8217;s forming a cluster properly. You can do this (when using the default JUL logging) by adding a file
called <code>vertx-default-jul-logging.properties</code> on your classpath. This is a standard java.util.logging (JUL)
configuration file. Inside it set:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>com.hazelcast.level=INFO</pre>
</div>
</div>
<div class="paragraph">
<p>and also</p>
</div>
<div class="listingblock">
<div class="content">
<pre>java.util.logging.ConsoleHandler.level=INFO
java.util.logging.FileHandler.level=INFO</pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_hazelcast_logging">Hazelcast logging</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The logging backend used by Hazelcast is <code>jdk</code> by default (understand JUL). If you want to redirect the logging to
another library, you need to set the <code>hazelcast.logging.type</code> system property such as in:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>-Dhazelcast.logging.type=slf4j</pre>
</div>
</div>
<div class="paragraph">
<p>See the <a href="http://docs.hazelcast.org/docs/3.6.1/manual/html-single/index.html#logging-configuration">hazelcast documentation</a> for more details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_using_a_different_hazelcast_version">Using a different Hazelcast version</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You may want to use a different version of Hazelcast. The default version is <code>3.6.3</code>. To do so, you
need to:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>put the version you want in the application classpath</p>
</li>
<li>
<p>if you are running a fat jar, configure your build manager to use the right version</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>In this later case, you would need in Maven:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
  &lt;groupId&gt;com.hazelcast&lt;/groupId&gt;
  &lt;artifactId&gt;hazelcast&lt;/artifactId&gt;
  &lt;version&gt;ENTER_YOUR_VERSION_HERE&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;io.vertx&lt;/groupId&gt;
  &lt;artifactId&gt;vertx-hazelcast&lt;/artifactId&gt;
  &lt;version&gt;3.3.3&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
<div class="paragraph">
<p>Depending on the version, you may need to exclude some transitive dependencies.</p>
</div>
<div class="paragraph">
<p>On Gradle, you can achieve the same overloading using:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code>dependencies {
 compile ("io.vertx:vertx-hazelcast:3.3.3"){
   exclude group: 'com.hazelcast', module: 'hazelcast'
 }
 compile "com.hazelcast:hazelcast:ENTER_YOUR_VERSION_HERE"
}</code></pre>
</div>
</div>
</div>
</div>

        

        
          <div id="footer">
            <div id="footer-text">
              
                Last updated 2016-09-12 08:38:04 CEST
              
              
            </div>
          </div>
        
      </div>
    </div>
  </div>
</div>

<footer>
  <div class="container">
    <div class="row">
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Vert.x</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/">Home</a></li>
          <li><a href="http://vertx.io/download/">Download</a></li>
          <li><a href="http://vertx.io/docs/">Documentation</a></li>
          <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
          <li><a href="http://vertx.io/blog/">Blog</a></li>
          <li><a href="http://vertx.io/vertx2/" class="vertx-2-link">Vert.x 2</a></li>
        </ul>
      </div>
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Community</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/community/">Help &amp; Contributors</a></li>
          <li><a href="http://vertx.io/materials/">Learning materials</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx">User Group</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx-dev">Developer Group</a></li>
        </ul>
      </div>

      <div class="col-xs-12 col-sm-6 col-lg-offset-2 col-md-6 copyright">
        <p>Vert.x is open source and dual licensed under the <a href="https://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License 1.0</a> and <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>.</p>
        <p>This website is licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 License</a>.<br>
        Design by <a href="http://www.michel-kraemer.com">Michel Kr&auml;mer</a>. <a href="http://www.entypo.com">Entypo pictograms</a> by Daniel Bruce.</p>
        <div class="row">
          <div class="col-xs-12 col-lg-offset-1 col-md-5">
            <a href="http://eclipse.org">
            <img class="logo eclipse-logo" src="http://vertx.io/assets/eclipse_logo_grey_small.png" width="204" height="48">
            </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-0 col-md-5">
            <a href="http://cloudbees.com">
            <img class="logo cloudbees-logo" src="http://vertx.io/assets/Button-Built-on-CB-1-grey.png" width="180" height="48">
           </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-1 col-md-5 jprofiler">
            <a href="http://www.ej-technologies.com/products/jprofiler/overview.html"
            style="text-decoration:none">
            <img class="logo jprofiler-logo" src="http://vertx.io/assets/jprofiler-logo.png" width="48" height="48"><span class="jprofiler-logo">&nbsp; JPROFILER</span>
            </a>
          </div>
        </div>
      </div>
    </div>
  </div>
</footer>

<script src="http://static.jboss.org/theme/js/libs/jquery/jquery-1.9.1.min.js"></script>
<script src="http://vertx.io/javascripts/bootstrap.min.js"></script>
<script src="http://vertx.io/javascripts/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



<script src="http://vertx.io/javascripts/sidebar.js"></script>


</body>
</html>
